<?
开发环境win10+php7.0.1+mysql5.7+redis3.0.504

目录设置   我的理解 项目比分组更好移植
	JETEE框架系统和APP项目可以放到非WEB访问目录下面，根下只放用户上传及入口文件，从而提高网站的安全性。	
	JETEE 	系统目录（框架核心）
		Extend	扩展：自定义的类，函数   改框架只改此目录 其它目录一般不动
		Common 	各项目公共文件目录，一般放置各项目的公共函数
		Conf 	各项目配置目录，各项目所有的配置文件都放在这里
		Lang 	各项目语言包目录（可选 如果不需要多语言支持 可删除）
		Lib 	项目类库目录，通常包括Action和Model子目录
		Tpl 	项目模板目录，支持模板主题
		Runtime 项目才有 包括Cache（模板缓存）、Temp（数据缓存）、Data（数据目录）和Logs（日志文件）子目录，如果存在分组的话，则首先是分组目录是分组目录。
	APP 		项目目录（下面的各项目结构同上面的应用目录）
		Home	默认主项目
			Home 	默认主分组  负责主页生成
			Admin 	Home项目下后台的公共资源
		Article

	Public 		网站公共资源目录（存放各项目的Css、Js和图片等资源,便于项目目录放于非web访问目录下）
		js 
		images 
		Admin 	后台的公共资源
	Uploads		网站上传目录（用户上传的统一目录）
		ueditor
		temp	上传时中转的临时目录，可随时删除
	index.php 	项目Home的入口文件
	admin.php 	项目Admin的入口文件
	
	
	
	

库设计
	
DROP TABLE IF EXISTS `je_user`;
CREATE TABLE IF NOT EXISTS `je_user` (
	`uid` 			int(11) unsigned NOT NULL AUTO_INCREMENT 			COMMENT '会员ID',
	`user_name` 	char(15) NOT NULL DEFAULT '' 						COMMENT '会员名字母开始，字母、数字组合',
	`nickname` 		char(15) NOT NULL DEFAULT '' 						COMMENT '',
	`email` 		varchar(40) NOT NULL DEFAULT '' 					COMMENT 'email',
	`check_mail` 	tinyint(1) NOT NULL DEFAULT '0' 					COMMENT '邮箱激活 0否 1是',
	`password`		char(32) NOT NULL DEFAULT '' 						COMMENT '密码',
	`salt` 			char(6) NOT NULL DEFAULT '' 						COMMENT '加密',

	`avatar` 		varchar(80) NOT NULL DEFAULT 'Public/images/avatar.jpg'	COMMENT '用户头像',
	`true_name` 	varchar(50) NOT NULL DEFAULT '' 					COMMENT '收款姓名',
	`sex` 			tinyint(1) unsigned NOT NULL DEFAULT '0' 			COMMENT '1为男  2为女  0保密',
	`qq` 			char(13) NOT NULL DEFAULT '' 						COMMENT 'QQ',
	`phone` 		char(11) NOT NULL DEFAULT '' 						COMMENT '手机',
	`check_phone` 	tinyint(1) NOT NULL DEFAULT '0' 					COMMENT '手机激活 0否 1是',
	
	`type` 			tinyint(3) NOT NULL DEFAULT '0' 					COMMENT '会员类型10=>个人,20=>企业  对应配置user_type',
	`company` 		varchar(30) NOT NULL DEFAULT '' 					COMMENT '企业名称',
	
	`reg_date` 		int(10) unsigned NOT NULL DEFAULT '0' 				COMMENT '注册时间',
	`reg_ip` 		char(15) NOT NULL DEFAULT '' 						COMMENT '申请加入ip',
	`last_visit` 	int(10) unsigned NOT NULL DEFAULT '0' 				COMMENT '最后一次登陆时间',
	`last_ip` 		char(15) NOT NULL DEFAULT '' 						COMMENT '最后一次访问ip',
	`visit_count` 	int(10) unsigned NOT NULL DEFAULT '0' 				COMMENT '登陆统计',
	
	`gold_coin`		int(10) unsigned NOT NULL DEFAULT '0' 				COMMENT '金币',
	`money`			decimal(10,2) NOT NULL DEFAULT '0'					COMMENT '用户余额',
	`rank_points`	int(10) unsigned NOT NULL DEFAULT '0'				COMMENT '等级积分，跟消费积分是分开的',
	`pay_points`	int(10) unsigned NOT NULL DEFAULT '0'				COMMENT '消费积分，跟等级积分是分开的',
	
	`recommend_email` varchar(40) NOT NULL DEFAULT '' 					COMMENT '推荐人邮箱',
	`parent_id` 	int(11) unsigned NOT NULL DEFAULT '0' 				COMMENT '推荐人uid',
	
	
	`friend_num` 	int(11) unsigned NOT NULL DEFAULT '0' 				COMMENT '好友数量 缓冲',
	`follow_num` 	int(11) unsigned NOT NULL DEFAULT '0' 				COMMENT '关注帐号数量',
	`fans_num` 		int(11) unsigned NOT NULL DEFAULT '0' 				COMMENT '粉丝数量',
	`collect_num` 	int(11) unsigned NOT NULL DEFAULT '0' 				COMMENT '收藏项目数量',
	`message_num` 	int(11) unsigned NOT NULL DEFAULT '0' 				COMMENT '新私信数量',
	`total_cost`	int(10) unsigned NOT NULL DEFAULT '0'				COMMENT '一共消费多少钱',
	
	`post_num`		int(10) unsigned NOT NULL DEFAULT '0' 				COMMENT '发起项目次数  提交加 审核时不加',
	`support_num`	int(10) unsigned NOT NULL DEFAULT '0' 				COMMENT '支持项目次数  支付成功加',

	`status` 		tinyint(1) unsigned NOT NULL DEFAULT '0' 			COMMENT '锁定状态0否 1是  4删除',
	`rid` 			tinyint(3) unsigned NOT NULL DEFAULT '0' 			COMMENT '会员等级编号，其中0是没有会员等级',
	PRIMARY KEY (`uid`),
	UNIQUE KEY `email` (`email`),
	UNIQUE KEY `nickname` (`nickname`),
	KEY `phone` (`phone`),
	KEY `status` (`status`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
	
	
	
	
	
	
具体MySQL/Connection用法
// 初始化db连接
$db = new \Workerman\MySQL\Connection('host', 'port', 'user', 'password', 'db_name');

// 获取所有数据
$db->select('ID,Sex')->from('Persons')->where('sex= :sex AND ID = :id')->bindValues(array('sex'=>'M', 'id' => 1))->query();
//等价于
$db->select('ID,Sex')->from('Persons')->where("sex= 'M' AND ID = 1")->query();
//等价于
$db->query("SELECT ID,Sex FROM `Persons` WHERE sex='M' AND ID = 1");


// 获取一行数据
$db->select('ID,Sex')->from('Persons')->where('sex= :sex')->bindValues(array('sex'=>'M'))->row();
//等价于
$db->select('ID,Sex')->from('Persons')->where("sex= 'M' ")->row();
//等价于
$db->row("SELECT ID,Sex FROM `Persons` WHERE sex='M'");


// 获取一列数据
$db->select('ID')->from('Persons')->where('sex= :sex')->bindValues(array('sex'=>'M'))->column();
//等价于
$db->select('ID')->from('Persons')->where("sex= 'F' ")->column();
//等价于
$db->column("SELECT `ID` FROM `Persons` WHERE sex='M'");

// 获取单个值
$db->select('ID')->from('Persons')->where('sex= :sex')->bindValues(array('sex'=>'M'))->single();
//等价于
$db->select('ID')->from('Persons')->where("sex= 'F' ")->single();
//等价于
$db->single("SELECT ID FROM `Persons` WHERE sex='M'");

// 复杂查询
$db->select('*')->from('table1')->innerJoin('table2','table1.uid = table2.uid')->where('age > :age')->groupBy(array('aid'))->having('foo="foo"')->orderByASC/*orderByDESC*/(array('did'))
->limit(10)->offset(20)->bindValues(array('age' => 13));
// 等价于
$db->query('SELECT * FROM `table1` INNER JOIN `table2` ON `table1`.`uid` = `table2`.`uid`
WHERE age > 13 GROUP BY aid HAVING foo="foo" ORDER BY did LIMIT 10 OFFSET 20');

// 插入
$insert_id = $db->insert('Persons')->cols(array(
    'Firstname'=>'abc',
    'Lastname'=>'efg',
    'Sex'=>'M',
    'Age'=>13))->query();
等价于
$insert_id = $db->query("INSERT INTO `Persons` ( `Firstname`,`Lastname`,`Sex`,`Age`)
VALUES ( 'abc', 'efg', 'M', 13)");

// 更新
$row_count = $db->update('Persons')->cols(array('sex'))->where('ID=1')
->bindValue('sex', 'F')->query();
// 等价于
$row_count = $db->update('Persons')->cols(array('sex'=>'F'))->where('ID=1')->query();
// 等价于
$row_count = $db->query("UPDATE `Persons` SET `sex` = 'F' WHERE ID=1");

// 删除
$row_count = $db->delete('Persons')->where('ID=9')->query();
// 等价于
$row_count = $db->query("DELETE FROM `Persons` WHERE ID=9");

// 事务
$db->beginTrans();
....
$db->commitTrans(); // or $db->rollBackTrans();
